Costa Rica en la región

Casos acumulados

Casos desde el día 1

Casos por 100 mil habitantes


Casos en Costa Rica

Hospitalizaciones

Casos activos por cantón y provincia

Evolución de casos acumulados por provincia

  • Notese que para el 17 de abril hubo un faltante en los datos de personas recuperadas.

Evolución de casos por cantón durante los últimos 40 días

  • Vale aclarar que en las tablas diarias cantonales que publica el Ministerio de Salud a veces se dan cambios en la cantidad de enfermos por cantón que no corresponden con cambios en el total de enfermos del país. Esto vendría siendo como si los enfermos se movilizaron a otro cantón, significando una reducción en el número de casos para el cantón donde salió y un incremento para el cantón donde ingresó (tengo entendido que esto se da con aclaraciones del cantón de residencia del enfermo). En mi caso estoy convirtiendo esos “casos negativos” a cero, para que sea más fácil observar unicamente los cantones donde se dieron los nuevos casos.

Elaborado por con datos diarios del CSSE del John Hopkins University y del Ministerio de Salud de Costa Rica.

LS0tCnRpdGxlOiAiQ09WSUQtMTkgZW4gQ29zdGEgUmljYSIKYXV0aG9yOiAiZ2RzNTA2IgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZC0lbS0lWSAlSTolTTolUyVwJylgIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkoY291bnRyeWNvZGUpCmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KGdnaXJhcGgpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShzZikKbGlicmFyeShyZWFkeGwpICAgCmxpYnJhcnkoaHR0cikKbGlicmFyeShSQ29sb3JCcmV3ZXIpCmxpYnJhcnkodG1hcHRvb2xzKQoKU3lzLnNldGxvY2FsZShsb2NhbGU9ImVzX0VTLlVURi04IikKZm9ybWF0b19mZWNoYSA8LSAiJWQtJWIiCmZlY2hhX2hveSA8LSBhcy5jaGFyYWN0ZXIoU3lzLkRhdGUoKSkKI2ZlY2hhX2hveSA8LSAiMjAyMC0wNy0yMCIKCnBhaXNlcyA8LSBjKCJDb3N0YSBSaWNhIiwgIlBhbmFtYSIsICJFbCBTYWx2YWRvciIsICJEb21pbmljYW4gUmVwdWJsaWMiLAogICAgICAgICAgICAiSG9uZHVyYXMiLCAiR3VhdGVtYWxhIiwgIlVydWd1YXkiLCAiQ3ViYSIpCgpmdW5fcGFpc2VzIDwtIGZ1bmN0aW9uKGZlY2hhX2hveSwgcGFpc2VzKXsKICBjb3ZpZDE5X2NvbnRhZ2lvcyA8LSBmcmVhZCgiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5L21hc3Rlci9jc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X2NvbmZpcm1lZF9nbG9iYWwuY3N2IiwgaGVhZGVyPVQpWwogICAgLCB0aXBvIDo9ICJwb3NpdGl2b3MiCiAgXQogIAogIGNvdmlkMTlfcmVjdXBlcmFkb3MgPC0gZnJlYWQoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9DU1NFR0lTYW5kRGF0YS9DT1ZJRC0xOS9tYXN0ZXIvY3NzZV9jb3ZpZF8xOV9kYXRhL2Nzc2VfY292aWRfMTlfdGltZV9zZXJpZXMvdGltZV9zZXJpZXNfY292aWQxOV9yZWNvdmVyZWRfZ2xvYmFsLmNzdiIsIGhlYWRlcj1UKVsKICAgICwgdGlwbyA6PSAicmVjdXBlcmFkb3MiCiAgXQogIAogIGNvdmlkMTlfZGVjZXNvcyA8LSBmcmVhZCgiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5L21hc3Rlci9jc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X2RlYXRoc19nbG9iYWwuY3N2IiwgaGVhZGVyPVQpWwogICAgLCB0aXBvIDo9ICJmYWxsZWNpZG9zIgogIF0KICAKICBjb3ZpZDE5IDwtIHJiaW5kbGlzdChsaXN0KGNvdmlkMTlfY29udGFnaW9zLCBjb3ZpZDE5X2RlY2Vzb3MsIGNvdmlkMTlfcmVjdXBlcmFkb3MpKQogIGNvdmlkMTlfMSA8LSBtZWx0KGNvdmlkMTksCiAgICAgICAgICAgICAgICAgICAgICAgaWQudmFycyA9IGMoIlByb3ZpbmNlL1N0YXRlIiwgIkNvdW50cnkvUmVnaW9uIiwgIkxhdCIsICJMb25nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpcG8iKSwKICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lID0gImZlY2hhIiwKICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5uYW1lID0gImNhc29zIilbCiAgICAgICAgICAgICAgICAgICAgICAgICAsIGNhc29zIDo9IGFzLmludGVnZXIoY2Fzb3MpXQogIAogIGNvdmlkMTlfMiA8LSBkY2FzdChjb3ZpZDE5XzEsIAogICAgICAgICAgICAgICAgICAgICAgYFByb3ZpbmNlL1N0YXRlYCArIGBDb3VudHJ5L1JlZ2lvbmAgKyBMYXQgKyBMb25nICsgZmVjaGEgfiB0aXBvLCAKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhciA9ICJjYXNvcyIpWwogICAgICAgICAgICAgICAgICAgICAgICAsIGFjdGl2b3MgOj0gcG9zaXRpdm9zIC0gZmFsbGVjaWRvcyAtIHJlY3VwZXJhZG9zXQogIAogIGNvdmlkMTlfdGlkeSA8LSBtZWx0KGNvdmlkMTlfMiwKICAgICAgICAgICAgICAgICAgICAgICBpZC52YXJzID0gYygiUHJvdmluY2UvU3RhdGUiLCAiQ291bnRyeS9SZWdpb24iLCAiTGF0IiwgIkxvbmciLCAiZmVjaGEiKSwKICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lID0gInRpcG8iLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLm5hbWUgPSAiY2Fzb3MiKVsKICAgICAgICAgICAgICAgICAgICAgICAgICwgYDo9YChmZWNoYSA9IG1keShmZWNoYSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kX3BhaXMgPSBjb3VudHJ5Y29kZShgQ291bnRyeS9SZWdpb25gLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9ICJjb3VudHJ5Lm5hbWUiLCBkZXN0aW5hdGlvbiA9ICJpc28zYyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXMgPSBjb3VudHJ5Y29kZShgQ291bnRyeS9SZWdpb25gLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gImNvdW50cnkubmFtZSIsIGRlc3RpbmF0aW9uID0gInVuLm5hbWUuZXMiKSkKICAgICAgICAgICAgICAgICAgICAgICBdCiAgCiAgdF9jbnRyeXMgPC0gY292aWQxOV90aWR5W2BDb3VudHJ5L1JlZ2lvbmAgJWluJSBwYWlzZXMKICBdWwogICAgLCAuKGNhc29zID0gc3VtKGNhc29zLCBuYS5ybSA9IFQpKSwKICAgIGJ5ID0gYygiQ291bnRyeS9SZWdpb24iLCAiZmVjaGEiLCAidGlwbyIsICJjb2RfcGFpcyIsICJwYWlzIikgCiAgXVsKICAgICwgSUQgOj0gc2VxX2xlbiguTikKICBdCiAgCiAgcmV0dXJuKHRfY250cnlzKQp9CgpmdW5fY2FudG9uZXNfcmVzdW1lbiA8LSBmdW5jdGlvbihmZWNoYV9ob3kpewogIHRibF90aXBvIDwtIGMoIlBPU0lUSVZPUyIsICJSRUNVUCIsICJGQUxMRUNJRE9TIiwgIkdFTkVSQUwiKQoKICAjaHR0cDovL2dlb3Zpc2lvbi51bmVkLmFjLmNyL29nZXMvYXJjaGl2b3NfY292aWQvMDRfMjkvMDRfMjlfQ1NWX0dFTkVSQUwuY3N2CiAgIyJodHRwOi8vZ2VvdmlzaW9uLnVuZWQuYWMuY3Ivb2dlcy9hcmNoaXZvc19jb3ZpZC8wNF8yOS8wNF8yOV9DU1ZfR0VORVJBTC5jc3YiICAKICBVUkxzIDwtIHBhc3RlMCgiaHR0cDovL2dlb3Zpc2lvbi51bmVkLmFjLmNyL29nZXMvYXJjaGl2b3NfY292aWQvIiwgCiAgICAgICAgICAgICAgICAgICAgICBzdWJzdHIoZmVjaGFfaG95LCA2LCA3KSwgIl8iLCBzdWJzdHIoZmVjaGFfaG95LCA5LCAxMCksICIvIiwKICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cihmZWNoYV9ob3ksIDYsIDcpLCAiXyIsIHN1YnN0cihmZWNoYV9ob3ksIDksIDEwKSwKICAgICAgICAgICAgICAgICJfQ1NWXyIsIHRibF90aXBvLCAiLmNzdiIpCiAgCiAgdGJscyA8LSBsYXBwbHkoVVJMc1tjKDEsMiwzLDQpXSwgZnJlYWQpCiAgCiAgY3N2X2VuY29kaW5nIDwtICJtYWNyb21hbiIgIyJXSU5ET1dTLTEyNTIiIAogIHBvc2l0aXZvcyA8LSBhcy5kYXRhLnRhYmxlKGxhcHBseSh0YmxzW1sxXV0sIGljb252LCBmcm9tID0gY3N2X2VuY29kaW5nLCB0byA9ICJVVEYtOCIgKSlbCiAgICAsIHRpcG8gOj0gInBvc2l0aXZvcyJdWwogICAgICBjYW50b24gIT0gIiIgfCAhaXMubmEoY2FudG9uKV0KICByZWN1cGVyYWRvcyA8LSBhcy5kYXRhLnRhYmxlKGxhcHBseSh0YmxzW1syXV0sIGljb252LCBmcm9tID0gY3N2X2VuY29kaW5nLCB0byA9ICJVVEYtOCIgKSlbCiAgICAsIHRpcG8gOj0gInJlY3VwZXJhZG9zIl1bCiAgICAgIGNhbnRvbiAhPSAiIiB8ICFpcy5uYShjYW50b24pXQogIGZhbGxlY2lkb3MgPC0gYXMuZGF0YS50YWJsZShsYXBwbHkodGJsc1tbM11dLCBpY29udiwgZnJvbSA9IGNzdl9lbmNvZGluZywgdG8gPSAiVVRGLTgiICkpWwogICwgdGlwbyA6PSAiZmFsbGVjaWRvcyJdWwogICAgY2FudG9uICE9ICIiIHwgIWlzLm5hKGNhbnRvbildCiAgIyBmYWxsZWNpZG9zIDwtIGZyZWFkKCIwNV8wNF9DU1ZfRkFMTEVDSURPU19jc3YuY3N2IilbCiAgIyAsIHRpcG8gOj0gImZhbGxlY2lkb3MiXVsKICAjICAgY2FudG9uICE9ICIiIHwgIWlzLm5hKGNhbnRvbildCiAgZ2VuZXJhbCA8LSBhcy5kYXRhLnRhYmxlKGxhcHBseSh0YmxzW1s0XV0sIGljb252LCBmcm9tID0gY3N2X2VuY29kaW5nLCB0byA9ICJVVEYtOCIgKSlbCiAgICBGRUNIQSAhPSAiIl0KICAKICBjYW50b25lcyA8LSByYmluZGxpc3QobGlzdChwb3NpdGl2b3MsIHJlY3VwZXJhZG9zLCBmYWxsZWNpZG9zKSwgdXNlLm5hbWVzPVRSVUUsIGZpbGwgPSBUUlVFKQogIAogIGNhbnRvbmVzX3RpZHlfMSA8LSBtZWx0KGNhbnRvbmVzWywgIWMoImNvZF9wcm92aW4iLCAiY29kX2NhbnRvbiIpXSwKICAgICAgICAgICAgICAgICAgICAgICBpZC52YXJzID0gYygicHJvdmluY2lhIiwgImNhbnRvbiIsICJ0aXBvIiksCiAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUubmFtZSA9ICJmZWNoYSIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubmFtZSA9ICJjYXNvcyIpWwogICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmluY2lhICE9ICIiCiAgICAgICAgICAgICAgICAgICAgICAgXVsKICAgICAgICAgICAgICAgICAgICAgICAgICwgZmVjaGEgOj0gZG15KGZlY2hhKQogICAgICAgICAgICAgICAgICAgICAgIF1bLCBjYXNvcyA6PSBhcy5pbnRlZ2VyKGNhc29zKV0KICAKICBhY3Rpdm9zIDwtIGRjYXN0KGNhbnRvbmVzX3RpZHlfMVtpcy5uYShjYXNvcyksIGNhc29zIDo9IDBdLCAKICAgICAgICAgICAgICAgICAgIGZlY2hhICsgY2FudG9uICsgcHJvdmluY2lhIH4gdGlwbywgdmFsdWUudmFyID0gImNhc29zIilbCiAgICAsIGA6PWAoY2Fzb3MgPSBwb3NpdGl2b3MgLSBmYWxsZWNpZG9zIC0gcmVjdXBlcmFkb3MsCiAgICAgICAgICAgdGlwbyA9ICJhY3Rpdm9zIikKICBdWwogICAgLCAuKGZlY2hhLCBjYW50b24sIHByb3ZpbmNpYSwgY2Fzb3MsIHRpcG8pCiAgXQogIAogIGNhbnRvbmVzX3RpZHlfMiA8LSByYmluZGxpc3QobGlzdChjYW50b25lc190aWR5XzEsIGFjdGl2b3MpLCB1c2UubmFtZXMgPSBUUlVFLCBmaWxsID0gVFJVRSkKICAKICBzZXRvcmRlcihjYW50b25lc190aWR5XzIsIC1jYW50b24sIHRpcG8sIGZlY2hhKQogIGNhbnRvbmVzX2Nhc29zIDwtIGNhbnRvbmVzX3RpZHlfMlt0aXBvID09ICJwb3NpdGl2b3MiICYgZmVjaGEgPT0gZmVjaGFfaG95ICYgY2Fzb3MgPiAwLCBjYW50b25dCiAgCiAgY2FudG9uZXNfdGlkeSA8LSBjYW50b25lc190aWR5XzJbY2FudG9uICVpbiUgY2FudG9uZXNfY2Fzb3NdWwogICAgLCBgOj1gKG51ZXZvcyA9IGNhc29zIC0gc2hpZnQoY2Fzb3MsIG4gPSAxTCwgZmlsbCA9IDAsIHR5cGUgPSAibGFnIiksCiAgICAgICAgICAgSUQgPSBzZXFfbGVuKC5OKSksIAogICAgYnkgPSBjKCJjYW50b24iLCAidGlwbyIpXQogICMgWwogICMgICAgIG51ZXZvcyA8IDAsIG51ZXZvcyA6PSAwCiAgIyAgIF0KICAKICBzZXRuYW1lcyhnZW5lcmFsLCB0b2xvd2VyKG5hbWVzKGdlbmVyYWwpKSkKICByZXN1bWVuIDwtIGdlbmVyYWxbZmVjaGEgIT0gIiIKICBdWwogICAgLCBgOj1gKGZlY2hhID0gYXMuRGF0ZShkbXkoZmVjaGEpKSwgI2FzLmludGVnZXIoZmVjaGEpLCBvcmlnaW4gPSAiMTg5OS0xMi0zMCIKICAgICAgICAgICBhY3Rpdm9zID0gYXMuaW50ZWdlcihwb3NpdGl2b3MpIC0gYXMuaW50ZWdlcihyZWN1cGVyYWRvcykgLSBhcy5pbnRlZ2VyKGZhbGxlY2lkb3MpLAogICAgICAgICAgIGBwZXJzLiBwcnVlYmFzYCA9IGFzLmludGVnZXIoZGVzY2FydGFkb3MpICsgYXMuaW50ZWdlcihwb3NpdGl2b3MpLAogICAgICAgICAgIGAlIHBydWViYXMgK2AgPSByb3VuZCgKICAgICAgICAgICAgIGFzLmludGVnZXIocG9zaXRpdm9zKS8oYXMuaW50ZWdlcihkZXNjYXJ0YWRvcykgKyBhcy5pbnRlZ2VyKHBvc2l0aXZvcykpKjEwMCwgMSkpXQogIAogIG51ZXZhc19wcmN0X3ByYl9wb3MgPC0gcmVzdW1lblssIC4oZmVjaGEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVldmFzID0gcm91bmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmludGVnZXIobnVlX3Bvc2kpLyhhcy5pbnRlZ2VyKG51ZV9kZXNjYXIpICsgYXMuaW50ZWdlcihudWVfcG9zaSkpKjEwMCwgMSkpXQogIHNldG9yZGVyKG51ZXZhc19wcmN0X3ByYl9wb3MsIGZlY2hhKQogIG51ZXZhc19wcmN0X3ByYl9wb3MgPC0gbnVldmFzX3ByY3RfcHJiX3BvcyRudWV2YXMKICAKICByZXN1bWVuX3RpZHkgPC0gbWVsdChyZXN1bWVuLAogICAgICAgICAgICAgICAgICAgICAgIGlkLnZhcnMgPSAiZmVjaGEiLAogICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWUgPSAidmFyaWFibGUiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLm5hbWUgPSAiY2Fzb3MiKVsKICAgICAgICAgICAgICAgICAgICAgICAgICwgY2Fzb3MgOj0gYXMubnVtZXJpYyhjYXNvcykKICAgICAgICAgICAgICAgICAgICAgICBdCiAgc2V0b3JkZXIocmVzdW1lbl90aWR5LCB2YXJpYWJsZSwgZmVjaGEpCiAgcmVzdW1lbl90aWR5WwogICAgLCBgOj1gKG51ZXZvcyA9IGNhc29zIC0gc2hpZnQoY2Fzb3MsIG4gPSAxTCwgZmlsbCA9IDAsIHR5cGUgPSAibGFnIiksCiAgICAgICAgICAgSUQgPSBzZXFfbGVuKC5OKSksIAogICAgYnkgPSB2YXJpYWJsZV1bCiAgICAgICwgSURfMiA6PSBzZXFfbGVuKC5OKQogICAgXQogIAogIHJlc3VtZW5fdGlkeVt2YXJpYWJsZSA9PSAiJSBwcnVlYmFzICsiLCAKICAgICAgICAgICAgICAgbnVldm9zIDo9IG51ZXZhc19wcmN0X3ByYl9wb3NdCiAgCiAgY2FudF9yZXN1bSA8LSBsaXN0KCkKICBjYW50X3Jlc3VtJHJlc3VtZW4gPC0gcmVzdW1lbl90aWR5CiAgY2FudF9yZXN1bSRjYW50b25lcyA8LSBjYW50b25lc190aWR5CiAgCiAgcmV0dXJuKGNhbnRfcmVzdW0pCn0KCmBgYAoKYGBge3IgaW5jbHVkZT1GQUxTRX0KdF9jbnRyeXMgPC0gZnVuX3BhaXNlcyhmZWNoYV9ob3ksIHBhaXNlcykKZmVjaGFfbWluIDwtIHRfY250cnlzW2Nhc29zID09IDEsIC5TRFt3aGljaC5taW4oZmVjaGEpXV0kZmVjaGEKCmZlY2hhX2RpYXVubyA8LSB0X2NudHJ5c1sKICB0aXBvID09ICJwb3NpdGl2b3MiICYgY2Fzb3MgPiAwIF1bCiAgICAsIC5TRFt3aGljaC5taW4oZmVjaGEpXSwgYnkgPSAiQ291bnRyeS9SZWdpb24iIF1bCiAgICAgICwgLihgQ291bnRyeS9SZWdpb25gLAogICAgICAgICAgZmVjaGFfZGlhdW5vID0gZmVjaGEpXQogIAp0X2d0X2RpYXVubyA8LSBmZWNoYV9kaWF1bm9bCiAgdF9jbnRyeXMsIG9uPWMoYENvdW50cnkvUmVnaW9uYCA9ICJDb3VudHJ5L1JlZ2lvbiIpIF1bCiAgICBmZWNoYSA+PSBmZWNoYV9kaWF1bm9dWwogICAgICBvcmRlcihgQ291bnRyeS9SZWdpb25gLCB0aXBvLCBmZWNoYSkgXVsKICAgICAgICBjYXNvcyA+IDAsIAogICAgICAgIGA6PWAobnVtX2RpYSA9IGFzLmludGVnZXIoZGlmZnRpbWUoZmVjaGEsIGZlY2hhX2RpYXVubywgdW5pdHMgPSAiZGF5cyIpICsgMSksCiAgICAgICAgICAgICBudWV2b3NfY2Fzb3MgPSBjYXNvcyAtIHNoaWZ0KGNhc29zLCBmaWxsID0gMCksCiAgICAgICAgICAgICBwcmN0X2RpZl9jYXNvcyA9IHJvdW5kKChjYXNvcyAtIHNoaWZ0KGNhc29zLCBmaWxsID0gMCkpLyhzaGlmdChjYXNvcywgZmlsbCA9IE5BKSkqMTAwLCAxKSksIAogICAgICAgIGJ5ID0gYygiQ291bnRyeS9SZWdpb24iLCAidGlwbyIsICJjb2RfcGFpcyIsICJwYWlzIikgXQoKdF9ndF9kaWF1bm9baXMubmEodF9ndF9kaWF1bm8pXSA8LSAwCgptYXhfZGlhX0NSIDwtIG1heCh0X2d0X2RpYXVub1tgQ291bnRyeS9SZWdpb25gID09ICJDb3N0YSBSaWNhIiAmIHRpcG8gPT0gInBvc2l0aXZvcyIsIG51bV9kaWFdKQoKc2V0b3JkZXIodF9ndF9kaWF1bm8sIC1gQ291bnRyeS9SZWdpb25gLCBmZWNoYSkKdF9ndF9kaWF1bm8kYENvdW50cnkvUmVnaW9uYCA8LSBmYWN0b3IodF9ndF9kaWF1bm8kYENvdW50cnkvUmVnaW9uYCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscz11bmlxdWUodF9ndF9kaWF1bm8kYENvdW50cnkvUmVnaW9uYCkpCgpwb2JsYWNpb24gPC0gZnJlYWQoIldQUDIwMTlfVG90YWxQb3B1bGF0aW9uQnlTZXguY3N2IilbCiAgVGltZSA9PSAyMDIwICYgVmFyaWFudCA9PSAiTWVkaXVtIiwKICAuKExvY2F0aW9uLCAKICAgIFBvcFRvdGFsID0gYXMuaW50ZWdlcihQb3BUb3RhbCoxMDAwKSldCgp0Yl9nZW5lcmFsIDwtIG1lcmdlKHRfZ3RfZGlhdW5vLCBwb2JsYWNpb24sIGJ5LnggPSAiQ291bnRyeS9SZWdpb24iLCBieS55ID0gIkxvY2F0aW9uIiwgYWxsLnggPSBUUlVFKQoKdGJfZ2VuZXJhbFsKICAsIGNhc29zXzEwayA6PSBjYXNvcyoxMDAwMDAvUG9wVG90YWxdCgpjYW50X3Jlc3VtZW4gPC0gZnVuX2NhbnRvbmVzX3Jlc3VtZW4oZmVjaGFfaG95KQpjYW50b25lc190aWR5IDwtIGNhbnRfcmVzdW1lbiRjYW50b25lcwoKY2FudG9uZXNfc2ltcCA8LSBzdF9yZWFkKCJjYW50b25lcy5nZW9qc29uIikKCmNhbnRvbmVzX21hcGEgPC0gZGNhc3QoY2FudG9uZXNfdGlkeSwgIGZlY2hhICsgcHJvdmluY2lhICsgY2FudG9uIH4gdGlwbywgdmFsdWUudmFyID0gImNhc29zIikKY2FudG9uZXNfbWFwYV9zZiA8LSBtZXJnZShjYW50b25lc19zaW1wLCBjYW50b25lc19tYXBhLCBieSA9IGMoImNhbnRvbiIsICJwcm92aW5jaWEiKSkKCnByb3ZpbmNpYXMgPSBjYW50b25lc190aWR5WwogICwgLihwb3NpdGl2b3MgPSBzdW0oY2Fzb3NbdGlwbyA9PSAicG9zaXRpdm9zIl0sIG5hLnJtID0gVFJVRSksCiAgICAgIHJlY3VwZXJhZG9zID0gc3VtKGNhc29zW3RpcG8gPT0gInJlY3VwZXJhZG9zIl0sIG5hLnJtID0gVFJVRSksCiAgICAgIGFjdGl2b3MgPSBzdW0oY2Fzb3NbdGlwbyA9PSAiYWN0aXZvcyJdLCBuYS5ybSA9IFRSVUUpLAogICAgICBmYWxsZWNpZG9zID0gc3VtKGNhc29zW3RpcG8gPT0gImZhbGxlY2lkb3MiXSwgbmEucm0gPSBUUlVFKSksIAogIGJ5ID0gYygicHJvdmluY2lhIiwgImZlY2hhIikKXVsKICAsIG1heF9jYXNvcyA6PSBtYXgocG9zaXRpdm9zKSwgYnkgPSBjKCJwcm92aW5jaWEiKQpdCgpzZXRvcmRlcihwcm92aW5jaWFzLCBwcm92aW5jaWEpCgpwcm92aW5jaWFzJHByb3ZpbmNpYSA8LSBmYWN0b3IocHJvdmluY2lhcyRwcm92aW5jaWEsIGxldmVscz11bmlxdWUocHJvdmluY2lhcyRwcm92aW5jaWEpKQoKQ1JfZGV0YWxsZXMgPC0gY2FudF9yZXN1bWVuJHJlc3VtZW4KQ1JfZGV0YWxsZXNbZmVjaGEgPT0gbHVicmlkYXRlOjp5bWQoIjIwMjAtMDQtMjYiKSAmIHZhcmlhYmxlID09ICJmYWxsZWNpZG9zIiwKICAgICAgICAgICAgYDo9YChjYXNvcyA9IHNoaWZ0KGNhc29zKSwKICAgICAgICAgICAgICAgICBudWV2b3MgPSAwKV0KYGBgCgoKCiMjIENvc3RhIFJpY2EgZW4gbGEgcmVnacOzbiB7LnRhYnNldH0KIyMjIENhc29zIGFjdW11bGFkb3MKCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcuYWxpZ249ImNlbnRlciJ9CiMgY29scyA8LSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwgIiNmYjlhOTkiLCAiI2UzMWExYyIsCiMgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsICIjY2FiMmQ2IiwgIiM2YTNkOWEiLCIjQ0RCRTcwIiAsIiNiMTU5MjgiKQojIGJyZXdlci5wYWwoMTIsICJQYWlyZWQiKQoKIyBjb2xfcGFpc2VzIDwtIGNvbG9yUmFtcFBhbGV0dGUoY29scykobGVuZ3RoKHBhaXNlcykpCmNvbF9wYWlzZXMgPC0gYnJld2VyLnBhbChsZW5ndGgocGFpc2VzKSwgIlBhaXJlZCIpCgoKZzFfZyA8LSBnZ3Bsb3QodF9jbnRyeXNbCiAgI2ZlY2hhID49IGZlY2hhX21pbiAmIAogIGZlY2hhID49IGRteSgiMDgvMDMvMjAyMCIpICYKICAgIGNhc29zID4gMF1bCiAgICAgIHRpcG8gPT0gImNvbnRhZ2lvcyIgJiBjYXNvcyA8IDIwLCBjYXNvcyA6PSBOQV0sIAogIGFlcyh4ID0gZmVjaGEsIHkgPSBjYXNvcywgZ3JvdXAgPSBwYWlzLCBjb2wgPSBwYWlzKSkgKyAKICBnZW9tX2xpbmUoYWxwaGEgPSAwLjgpICsKICAjIGdlb21fcG9pbnRfaW50ZXJhY3RpdmUoCiAgIyAgIGFlcyh0b29sdGlwID0gcGFzdGUwKAogICMgICAgIHBhaXMsICJcbiIsIAogICMgICAgIHBhc3RlMChkYXkoZmVjaGEpLCAiIGRlICIsIG1vbnRoKGZlY2hhLCBsYWJlbD1UUlVFLCBhYmJyPUZBTFNFKSksICJcbiIsIAogICMgICAgIGNhc29zLCIgY2Fzb3MiKSwKICAjICAgICBkYXRhX2lkID0gSUQpLAogICMgICBzaXplID0gMC41LCBhbHBoYSA9IDAuNykgKwogIHNjYWxlX3lfY29udGludW91cyh0cmFucyA9ICJsb2cxMCIsIGxhYmVscz1jb21tYV9mb3JtYXQoYWNjdXJhY3kgPSAxKSkgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIG1vbnRoIiwgCiAgICAgICAgICAgICAgIG1pbm9yX2JyZWFrcyA9IE5VTEwsCiAgICAgICAgICAgICAgIGRhdGVfbGFiZWxzID0gZm9ybWF0b19mZWNoYSkgKwogICMgc2NhbGVfY29sb3VyX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjb2xfcGFpc2VzKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0aXBvKSwgc2NhbGVzID0gImZyZWUiKSArCiAgdGhlbWVfbGlnaHQoKSArCiAgbGFicyh4ID0gIiIsCiAgICAgICB5ID0gIkNhc29zIHJlcG9ydGFkb3MiLAogICAgICAgY29sID0gIiIsCiAgICAgICB0aXRsZSA9ICIiLAogICAgICAgc3VidGl0bGUgPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT02MCwgaGp1c3Q9MSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYygwLDUsMCwwKSwgIm1tIikpCgpnaXJhZmUoZ2dvYmogPSBnMV9nLAogICAgICAgIyBvcHRpb25zID0gbGlzdChvcHRzX3Rvb2x0aXAodXNlX2ZpbGwgPSBUUlVFLAogICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IDEwLCBvZmZ5ID0gMTAsCiAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MgPSAiY29sb3I6d2hpdGU7IiksCiAgICAgICAjICAgICAgICAgICAgICAgIG9wdHNfaG92ZXIoY3NzID0gInN0cm9rZTpvcmFuZ2U7CiAgICAgICAjICAgICAgICAgICBzdHJva2Utd2lkdGg6MjsiKSwKICAgICAgICMgICAgICAgICAgIG9wdHNfdG9vbGJhcihzYXZlYXNwbmcgPSBGQUxTRSkpLAogICAgICAgd2lkdGhfc3ZnID0gNywgaGVpZ2h0X3N2ZyA9IDUpCgpgYGAKCiMjIyBDYXNvcyBkZXNkZSBlbCBkw61hIDEKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy5hbGlnbj0iY2VudGVyIn0KZzJfZyA8LSBnZ3Bsb3QodF9ndF9kaWF1bm9bbnVtX2RpYSA8PSBtYXhfZGlhX0NSICsgNV0sIAogICAgICAgICAgICAgYWVzKHggPSBudW1fZGlhLCB5ID0gY2Fzb3MsIGdyb3VwID0gcGFpcywgY29sID0gcGFpcykpICsgCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUsIGFscGhhID0gMC44KSArCiAgIyBnZW9tX3BvaW50X2ludGVyYWN0aXZlKAogICMgICBhZXModG9vbHRpcCA9IHBhc3RlMCgKICAjICAgcGFpcywgIlxuIiwgCiAgIyAgIHBhc3RlMChkYXkoZmVjaGEpLCAiIGRlICIsIG1vbnRoKGZlY2hhLCBsYWJlbD1UUlVFLCBhYmJyPUZBTFNFKSksICJcbiIsIAogICMgICBjYXNvcywiIGNhc29zIiksIAogICMgICBkYXRhX2lkID0gSUQpLAogICMgICBzaXplID0gMC41LCBhbHBoYSA9IDAuNykgKwogIHNjYWxlX3lfY29udGludW91cyh0cmFucyA9ICJsb2cxMCIsIGxhYmVscz1jb21tYV9mb3JtYXQoYWNjdXJhY3kgPSAxKSkgKwogIHNjYWxlX3hfY29udGludW91cyhtaW5vcl9icmVha3MgPSBOVUxMLCBsaW1pdHMgPSBjKDEsIE5BKSkgKyAKICAjZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsIGZvcm11bGE9ICh5IH4gZXhwKDIpKSwgc2U9RkFMU0UsIGNvbG9yPTEpICsKICAjIHNjYWxlX2NvbG91cl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gY29sX3BhaXNlcykgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGlwbyksIHNjYWxlID0gImZyZWUiKSArIAogIHRoZW1lX2xpZ2h0KCkgKwogIGxhYnMoeCA9ICJEw61hcyBsdWVnbyBkZSBwcmltZXJhIGRldGVjY2nDs24iLAogICAgICAgeSA9ICJDYXNvcyByZXBvcnRhZG9zIiwKICAgICAgIGNvbCA9ICIiLAogICAgICAgdGl0bGUgPSAiIiwKICAgICAgIHN1YnRpdGxlID0gIiIpICsKICAjIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChucm93ID0gMSkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAsMCwwLDApLCAibW0iKSkKCmdpcmFmZShnZ29iaiA9IGcyX2csCiAgICAgICAjIG9wdGlvbnMgPSBsaXN0KG9wdHNfdG9vbHRpcCh1c2VfZmlsbCA9IFRSVUUsCiAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gMTAsIG9mZnkgPSAxMCwKICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyA9ICJjb2xvcjp3aGl0ZTsiKSwKICAgICAgICMgICAgICAgICAgICAgICAgb3B0c19ob3Zlcihjc3MgPSAic3Ryb2tlOm9yYW5nZTsKICAgICAgICMgICAgICAgICAgIHN0cm9rZS13aWR0aDoyOyIpLAogICAgICAgIyAgICAgICAgICAgb3B0c190b29sYmFyKHNhdmVhc3BuZyA9IEZBTFNFKSksCiAgICAgICB3aWR0aF9zdmcgPSA3LCBoZWlnaHRfc3ZnID0gNSkKYGBgCgojIyMgQ2Fzb3MgcG9yIDEwMCBtaWwgaGFiaXRhbnRlcwoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLmFsaWduPSJjZW50ZXIifQpnNF9nIDwtIGdncGxvdCh0Yl9nZW5lcmFsWyNmZWNoYSA+PSBmZWNoYV9taW4gJgogICAgICAgICAgICAgICAgICAgICAgICAgIGZlY2hhID49IGRteSgiMjAvMDMvMjAyMCIpXSwgCiAgICAgICAgICAgICBhZXMoeCA9IGZlY2hhLCB5ID0gY2Fzb3NfMTBrLCBncm91cCA9IHBhaXMsIGNvbCA9IHBhaXMpKSArIAogIGdlb21fbGluZShhbHBoYSA9IDAuOCkgKwogICMgZ2VvbV9wb2ludF9pbnRlcmFjdGl2ZSgKICAjICAgYWVzKHRvb2x0aXAgPSBwYXN0ZTAoCiAgIyAgICAgcGFpcywgIlxuIiwgCiAgIyAgICAgcGFzdGUwKGRheShmZWNoYSksICIgZGUgIiwgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpKSwgIlxuIiwgCiAgIyAgICAgcm91bmQoY2Fzb3NfMTBrLDEpLCIgY2Fzb3MvMTAwayBoYWIuIiksCiAgIyAgICAgZGF0YV9pZCA9IElEKSwKICAjICAgc2l6ZSA9IDAuNSwgYWxwaGEgPSAwLjcpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zID0gImxvZzEwIiwgbGFiZWxzPWNvbW1hX2Zvcm1hdChhY2N1cmFjeSA9IDAuMDEpKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjEgbW9udGgiLCAKICAgICAgICAgICAgICAgbWlub3JfYnJlYWtzID0gTlVMTCwKICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSAgZm9ybWF0b19mZWNoYSkgKwogICMgc2NhbGVfY29sb3VyX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjb2xfcGFpc2VzKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0aXBvKSwgc2NhbGUgPSAiZnJlZSIpICsgCiAgdGhlbWVfbGlnaHQoKSArCiAgbGFicyh4ID0gIiIsCiAgICAgICB5ID0gIkNhc29zIHBvciBjYWRhIDEwMCwwMDAgaGFiaXRhbnRlcyIsCiAgICAgICBjb2wgPSAiIiwKICAgICAgIHRpdGxlID0gIiIsCiAgICAgICBzdWJ0aXRsZSA9ICIiKSArCiAgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTYwLCBoanVzdD0xKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAsMCwwLDUpLCAibW0iKSkKCmdpcmFmZShnZ29iaiA9IGc0X2csCiAgICAgICAjIG9wdGlvbnMgPSBsaXN0KG9wdHNfdG9vbHRpcCh1c2VfZmlsbCA9IFRSVUUsCiAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gMTAsIG9mZnkgPSAxMCwKICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyA9ICJjb2xvcjp3aGl0ZTsiKSwKICAgICAgICMgICAgICAgICAgICAgICAgb3B0c19ob3Zlcihjc3MgPSAic3Ryb2tlOm9yYW5nZTsKICAgICAgICMgICAgICAgICAgIHN0cm9rZS13aWR0aDoyOyIpLAogICAgICAgIyAgICAgICAgICAgb3B0c190b29sYmFyKHNhdmVhc3BuZyA9IEZBTFNFKSksCiAgICAgICB3aWR0aF9zdmcgPSA3LCBoZWlnaHRfc3ZnID0gNSkKYGBgCgojIyB7LX0KCiogTG9zIGNhc29zIGFjdGl2b3Mgc2UgY2FsY3VsYW4gY29tbzogCjxkaXYgYWxpZ249ImNlbnRlciI+JGFjdGl2b3MgPSBwb3NpdGl2b3MgLSBmYWxsZWNpZG9zIC0gcmVjdXBlcmFkb3MkPC9kaXY+CgoqKioKCiMjIENhc29zIGVuIENvc3RhIFJpY2EKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy5hbGlnbj0iY2VudGVyIn0Kdl9yZXN1bWVuRGlhcmlvX0NSIDwtIGdncGxvdCgKICBDUl9kZXRhbGxlc1sgdmFyaWFibGUgJWluJSBjKCJwb3NpdGl2b3MiLCAicmVjdXBlcmFkb3MiICwgImZhbGxlY2lkb3MiLCAiYWN0aXZvcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NhcnRhZG9zIiwgInBlcnMuIHBydWViYXMiLCAiJSBwcnVlYmFzICsiKV0sIAogIGFlcyh4ID0gZmVjaGEsIHkgPSBudWV2b3MpKSArCiAgZ2VvbV9jb2xfaW50ZXJhY3RpdmUoCiAgICAgICAgYWVzKHRvb2x0aXAgPSBwYXN0ZTAoZGF5KGZlY2hhKSwgIiBkZSAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoKGZlY2hhLCBsYWJlbD1UUlVFLCBhYmJyPUZBTFNFKSwgIlxuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAidmFsb3I6ICIsIG51ZXZvcyksCiAgICAgIGRhdGFfaWQgPSBJRF8yKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModmFyaWFibGUpLCBzY2FsZXMgPSAiZnJlZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gZnVuY3Rpb24oeCkgdW5pcXVlKGZsb29yKHByZXR0eShzZXEoMCwgKG1heCh4KSArIDEpICogMS4xKSkpKSkgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIyIHdlZWsiLCAKICAgICAgICAgICAgICAgbWlub3JfYnJlYWtzID0gTlVMTCwKICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSAgZm9ybWF0b19mZWNoYSkgKyAKICB0aGVtZV9saWdodCgpICsKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiVmFsb3JlcyByZXBvcnRhZG9zIGFsIGTDrWEiLAogICAgICAgdGl0bGUgPSAiVmFsb3JlcyBkaWFyaW9zIikgKyAKICAgIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT02MCwgaGp1c3Q9MSksCiAgICAgICAgIyBsZWdlbmQucG9zaXRpb249ImJvdHRvbSIsIGxlZ2VuZC5ib3ggPSAiaG9yaXpvbnRhbCIsIAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDUsMCwwLDUpLCAibW0iKSwKICAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDQpKQoKdl9yZXN1bWVuQWN1bV9DUiA8LSBnZ3Bsb3QoCiAgQ1JfZGV0YWxsZXNbIHZhcmlhYmxlICVpbiUgYygicG9zaXRpdm9zIiwgInJlY3VwZXJhZG9zIiAsICJmYWxsZWNpZG9zIiwgImFjdGl2b3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjYXJ0YWRvcyIsICJwZXJzLiBwcnVlYmFzIiwgIiUgcHJ1ZWJhcyArIildLCAKICBhZXMoeCA9IGZlY2hhLCB5ID0gY2Fzb3MpKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fcG9pbnRfaW50ZXJhY3RpdmUoCiAgICBhZXModG9vbHRpcCA9IHBhc3RlMChkYXkoZmVjaGEpLCAiIGRlICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpLCAiXG4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxvcjogIiwgY2Fzb3MpLAogICAgICAgIGRhdGFfaWQgPSBJRF8yKSwKICAgIHNpemUgPSAwLjUpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHZhcmlhYmxlKSwgc2NhbGVzID0gImZyZWUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGZ1bmN0aW9uKHgpIHVuaXF1ZShmbG9vcihwcmV0dHkoc2VxKDAsIChtYXgoeCkgKyAxKSAqIDEuMSkpKSkpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMiB3ZWVrIiwgCiAgICAgICAgICAgICAgIG1pbm9yX2JyZWFrcyA9IE5VTEwsCiAgICAgICAgICAgICAgIGRhdGVfbGFiZWxzID0gIGZvcm1hdG9fZmVjaGEpICsgCiAgdGhlbWVfbGlnaHQoKSArCiAgbGFicyh4ID0gIiIsCiAgICAgICB5ID0gIk7Dum1lcm8gdG90YWwiLAogICAgICAgdGl0bGUgPSAiVmFsb3JlcyBhY3VtdWxhZG9zIikgKyAKICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NjAsIGhqdXN0PTEpLAogICAgICAgICMgbGVnZW5kLnBvc2l0aW9uPSJib3R0b20iLCBsZWdlbmQuYm94ID0gImhvcml6b250YWwiLCAKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYyg1LDUsMCwwKSwgIm1tIiksCiAgICAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA0KSkKCmdpcmFmZShnZ29iaiA9IHBsb3RfZ3JpZCh2X3Jlc3VtZW5BY3VtX0NSLCB2X3Jlc3VtZW5EaWFyaW9fQ1IpLAogICAgICAgb3B0aW9ucyA9IGxpc3QoCiAgICAgICAgICBvcHRzX3Rvb2xiYXIoc2F2ZWFzcG5nID0gRkFMU0UpLAogICAgICAgICAgb3B0c19ob3Zlcihjc3MgPSAiZmlsbDpvcmFuZ2U7c3Ryb2tlOm9yYW5nZTtzdHJva2Utd2lkdGg6MTsiKSksCiAgICAgICB3aWR0aF9zdmcgPSA3LCBoZWlnaHRfc3ZnID0gNwogICAgICAgKQoKYGBgCgoqIFRlbmVyIHZhbG9yZXMgKmFjdGl2b3MgbmVnYXRpdm9zKiBlbiBjYXNvcyBwb3IgZMOtYSwgc2lnbmlmaWNhIHF1ZSBlc2UgZMOtYSBodWJvIG3DoXMgcmVjdXBlcmFkb3MgcXVlIGNhc29zIHBvc2l0aXZvcy4KKiAqcGVycy4gcHJ1ZWJhcyogZXMgZWwgbsO6bWVybyBkZSBwZXJzb25hcyBhIGxhcyBxdWUgc2UgbGVzIGFwbGljYXJvbiBwcnVlYmFzIChwb3NpdGl2b3MgKyBkZXNjYXJ0YWRvcykuCiogKiUgcHJ1ZWJhcyArKiBlcyBlbCBwb3JjZW50YWplIGRlIGxhcyBwZXJzb25hcyBhIGxhcyBxdWUgc2UgbGUgYXBsaWPDsyBwcnVlYmFzIHkgZGllcm9uIHBvc2l0aXZvLgoKIyMjIEhvc3BpdGFsaXphY2lvbmVzCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy5hbGlnbj0iY2VudGVyIn0KYnJhbmRlZF9jb2xvcnMgPC0gbGlzdCgKICAiYmx1ZSIgICA9ICIjMDA3OThjIiwKICAicmVkIiAgICA9ICIjZDE0OTViIiwKICAieWVsbG93IiA9ICIjZWRhZTQ5IiwKICAiZ3JlZW4iICA9ICIjNjZhMTgyIiwKICAibmF2eSIgICA9ICIjMmU0MDU3IiwgCiAgImdyZXkiICAgPSAiIzhkOTZhMyIKKQoKYnJhbmRlZF9wYWwgPC0gZnVuY3Rpb24oCiAgcHJpbWFyeSA9ICJibHVlIiwgCiAgb3RoZXIgPSAiZ3JleSIsIAogIGRpcmVjdGlvbiA9IDEKKSB7CiAgc3RvcGlmbm90KHByaW1hcnkgJWluJSBuYW1lcyhicmFuZGVkX2NvbG9ycykpCiAgCiAgZnVuY3Rpb24obikgewogICAgaWYgKG4gPiA2KSB3YXJuaW5nKCJCcmFuZGVkIENvbG9yIFBhbGV0dGUgb25seSBoYXMgNiBjb2xvcnMuIikKICAgIAogICAgaWYgKG4gPT0gMikgewogICAgICBvdGhlciA8LSBpZiAoIW90aGVyICVpbiUgbmFtZXMoYnJhbmRlZF9jb2xvcnMpKSB7CiAgICAgICAgb3RoZXIKICAgICAgfSBlbHNlIHsKICAgICAgICBicmFuZGVkX2NvbG9yc1tvdGhlcl0KICAgICAgfQogICAgICBjb2xvcl9saXN0IDwtIGMob3RoZXIsIGJyYW5kZWRfY29sb3JzW3ByaW1hcnldKQogICAgfSBlbHNlIHsKICAgICAgY29sb3JfbGlzdCA8LSBicmFuZGVkX2NvbG9yc1sxOm5dCiAgICB9CiAgICAKICAgIGNvbG9yX2xpc3QgPC0gdW5uYW1lKHVubGlzdChjb2xvcl9saXN0KSkKICAgIGlmIChkaXJlY3Rpb24gPj0gMCkgY29sb3JfbGlzdCBlbHNlIHJldihjb2xvcl9saXN0KQogIH0KfQoKc2NhbGVfZmlsbF9icmFuZGVkX2QgPC0gZnVuY3Rpb24oCiAgcHJpbWFyeSA9ICJibHVlIiwgCiAgb3RoZXIgPSAiZ3JleSIsIAogIGRpcmVjdGlvbiA9IDEsIAogIC4uLgopIHsKICBnZ3Bsb3QyOjpkaXNjcmV0ZV9zY2FsZSgKICAgICJmaWxsIiwgImJyYW5kZWQiLCAKICAgIGJyYW5kZWRfcGFsKHByaW1hcnksIG90aGVyLCBkaXJlY3Rpb24pLCAKICAgIC4uLgogICkKfQoKc2NhbGVfY29sX2JyYW5kZWRfZCA8LSBmdW5jdGlvbigKICBwcmltYXJ5ID0gImJsdWUiLCAKICBvdGhlciA9ICJncmV5IiwgCiAgZGlyZWN0aW9uID0gMSwgCiAgLi4uCikgewogIGdncGxvdDI6OmRpc2NyZXRlX3NjYWxlKAogICAgImNvbG91ciIsICJicmFuZGVkIiwgCiAgICBicmFuZGVkX3BhbChwcmltYXJ5LCBvdGhlciwgZGlyZWN0aW9uKSwgCiAgICAuLi4KICApCn0KCnNjYWxlX2ZpbGxfYnJhbmRlZF9kIDwtIHNjYWxlX2ZpbGxfYnJhbmRlZF9kCnNjYWxlX2NvbF9icmFuZGVkX2QgPC0gc2NhbGVfY29sX2JyYW5kZWRfZAoKZWRhZGVzIDwtIENSX2RldGFsbGVzW3ZhcmlhYmxlJWluJSBjKCJhZHVsX3Bvc2kiLCAiYW1fcG9zaSIsICJtZW5vcl9wb3NpIikgJgogICAgICAgICAgICAgICAgICAgICAgICBmZWNoYSA+IGx1YnJpZGF0ZTo6ZG15KCIwOS8zLzIwMjAiKV0KaG9zcGl0YWxpemFjaW9uIDwtIENSX2RldGFsbGVzW3ZhcmlhYmxlICVpbiUgYygic2Fsb24iLCAidWNpIikgJgogICAgICAgICAgICAgICAgICAgICAgICBmZWNoYSA+IGx1YnJpZGF0ZTo6ZG15KCIwOS8zLzIwMjAiKV0Kc2V4byA8LSBDUl9kZXRhbGxlc1t2YXJpYWJsZSAlaW4lIGMoIm11al9wb3NpIiwgImhvbV9wb3NpIikgJgogICAgICAgICAgICAgICAgICAgICAgICBmZWNoYSA+IGx1YnJpZGF0ZTo6ZG15KCIwOS8zLzIwMjAiKV0KCiMgZ19lZGFkZXMgPC0gZ2dwbG90KGVkYWRlc1ssIHZhcmlhYmxlIDo9IGZjYXNlKHZhcmlhYmxlID09ICJhZHVsX3Bvc2kiLCAiQWR1bHRvIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPT0gImFtX3Bvc2kiLCAiQWR1bHRvIE1heW9yIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPT0gIm1lbm9yX3Bvc2kiLCAiTWVub3IiKV0sCiMgICAgICAgIGFlcyh4ID0gZmVjaGEsIHkgPSBjYXNvcywgZ3JvdXAgPSB2YXJpYWJsZSwgY29sID0gdmFyaWFibGUpKSArCiMgICBnZW9tX2xpbmUoKSArCiMgICAjIGdlb21fcG9pbnRfaW50ZXJhY3RpdmUoCiMgICAjICAgYWVzKHRvb2x0aXAgPSBwYXN0ZTAoCiMgICAjICAgICBwYXN0ZTAoZGF5KGZlY2hhKSwgIiBkZSAiLCBtb250aChmZWNoYSwgbGFiZWw9VFJVRSwgYWJicj1GQUxTRSkpLCAiXG4iLAojICAgIyAgICAgdmFyaWFibGUsICJcbiIsCiMgICAjICAgICBjYXNvcywiIGNhc29zIiksIAojICAgIyAgICAgZGF0YV9pZCA9IElEKSwKIyAgICMgICBzaXplID0gMC41KSArIAojICAgIyBnZW9tX3RleHRfcmVwZWwoZGF0YSA9IGVkYWRlc1tmZWNoYSA9PSB5bWQoZmVjaGFfaG95KV0sIAojICAgIyAgICAgICAgICAgICAgICAgYWVzKGxhYmVsID0gdmFyaWFibGUpLAojICAgIyAgICAgICAgICAgICAgICAgbnVkZ2VfeCA9IDEsCiMgICAjICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpICsgCiMgICBnZW9tX3RleHQoZGF0YSA9IGVkYWRlc1tmZWNoYSA9PSB5bWQoZmVjaGFfaG95KV0sCiMgICAgICAgICAgICAgYWVzKGxhYmVsID0gdmFyaWFibGUsIAojICAgICAgICAgICAgICAgICB4ID0gZmVjaGEgKyBkYXlzKDIpLCAKIyAgICAgICAgICAgICAgICAgeSA9IGNhc29zLCAKIyAgICAgICAgICAgICAgICAgY29sb3IgPSB2YXJpYWJsZSkpICsgCiMgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCBOQSksCiMgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLDMpKSArCiMgICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSB3ZWVrIiwgCiMgICAgICAgICAgICAgICAgbWlub3JfYnJlYWtzID0gTlVMTCwKIyAgICAgICAgICAgICAgICBkYXRlX2xhYmVscyA9IGZvcm1hdG9fZmVjaGEpICsKIyAgIHRoZW1lX2xpZ2h0KCkgKwojICAgbGFicyh4ID0gIiIsCiMgICAgICAgIHkgPSAiQ2Fzb3MgYWN1bXVsYWRvcyIsCiMgICAgICAgIGNvbCA9ICIiKSArIAojICAgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTYwLCBoanVzdD0xKSwKIyAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKIyAgICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDUsNSwwLDApLCAibW0iKSkKIyAKIyBnX3NleG8gPC0gZ2dwbG90KHNleG9bLCB2YXJpYWJsZSA6PSBmY2FzZSh2YXJpYWJsZSA9PSAibXVqX3Bvc2kiLCAiTXVqZXIiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID09ICJob21fcG9zaSIsICJIb21icmUiKV0sIAojICAgICAgICBhZXMoeCA9IGZlY2hhLCB5ID0gY2Fzb3MsIGdyb3VwID0gdmFyaWFibGUsIGNvbCA9IHZhcmlhYmxlKSkgKwojICAgZ2VvbV9saW5lKCkgKwojICAgIyBnZW9tX3BvaW50X2ludGVyYWN0aXZlKAojICAgIyAgIGFlcyh0b29sdGlwID0gcGFzdGUwKAojICAgIyAgICAgcGFzdGUwKGRheShmZWNoYSksICIgZGUgIiwgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpKSwgIlxuIiwgCiMgICAjICAgICB2YXJpYWJsZSwgIlxuIiwKIyAgICMgICAgIGNhc29zLCIgY2Fzb3MiKSwgCiMgICAjICAgICBkYXRhX2lkID0gSUQpLAojICAgIyAgIHNpemUgPSAwLjUpICsKIyAgIHNjYWxlX2NvbF9icmFuZGVkX2QocHJpbWFyeSA9ICJncmV5IiwKIyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyID0gIm9yYW5nZSIpICsKIyAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIE5BKSwKIyAgICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsMykpICsKIyAgIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIHdlZWsiLCAKIyAgICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMLAojICAgICAgICAgICAgICAgIGRhdGVfbGFiZWxzID0gZm9ybWF0b19mZWNoYSkgKwojICAgdGhlbWVfbGlnaHQoKSArCiMgICBsYWJzKHggPSAiIiwKIyAgICAgICAgeSA9ICJDYXNvcyBhY3VtdWxhZG9zIiwKIyAgICAgICAgY29sID0gIiIpICsgCiMgICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NjAsIGhqdXN0PTEpLAojICAgICAgICAgIyBsZWdlbmQua2V5LndpZHRoID0gdW5pdCgyLCJtbSIpLAojICAgICAgICAgIyBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTYpLAojICAgICAgICAgIyBsZWdlbmQubWFyZ2luID0gdW5pdChjKDAsMCwwLDApLCAibW0iKSwKIyAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKIyAgICAgICAgICMgbGVnZW5kLnBvc2l0aW9uID0gYygwLjIsIDAuOCksIAojICAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoNSwwLDAsNSksICJtbSIpKQoKZ19ob3NwaSA8LSBnZ3Bsb3QoaG9zcGl0YWxpemFjaW9uWywgYDo9YCh2YXJpYWJsZSA9IGZjYXNlKHZhcmlhYmxlID09ICJ1Y2kiLCAiVUNJIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPT0gInNhbG9uIiwgIlNhbMOzbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEID0gc2VxX2xlbiguTikpXSwKICAgICAgICAgICAgICAgICAgYWVzKHggPSBmZWNoYSwgeSA9IGNhc29zLCBncm91cCA9IHZhcmlhYmxlLCBmaWxsID0gdmFyaWFibGUpKSArCiAgIyBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsgCiAgZ2VvbV9jb2xfaW50ZXJhY3RpdmUoCiAgICBhZXModG9vbHRpcCA9IHBhc3RlMCgKICAgICAgcGFzdGUwKGRheShmZWNoYSksICIgZGUgIiwgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpKSwgIlxuIiwKICAgICAgdmFyaWFibGUsICJcbiIsCiAgICAgIGNhc29zLCIgY2Fzb3MiKSwKICAgICAgZGF0YV9pZCA9IElEKSwKICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKwogIHNjYWxlX2ZpbGxfYnJhbmRlZF9kKG90aGVyID0gIiNhMmQ3MjkiKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjEgd2VlayIsIAogICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMLAogICAgICAgICAgICAgICBkYXRlX2xhYmVscyA9IGZvcm1hdG9fZmVjaGEsCiAgICAgICAgICAgICAgIGxpbWl0cyA9IGMobHVicmlkYXRlOjpkbXkoIjMwLTMtMjAyMCIpLCBOQSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCBOQSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwwLjIpKSArCiAgdGhlbWVfbGlnaHQoKSArCiAgbGFicyh4ID0gIiIsCiAgICAgICB5ID0gIkNhc29zIGFsIGTDrWEiLAogICAgICAgZmlsbCA9ICJIb3NwaXRhbGl6YWNpw7NuOiIpICsgCiAgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTYwLCBoanVzdD0xKSwKICAgICAgICBsZWdlbmQua2V5LndpZHRoID0gdW5pdCgyLCJtbSIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDEsMSwxLDEpLCAibW0iKSkKCiMgYWxpbmVhZG9zIDwtIGFsaWduX3Bsb3RzKGdfZWRhZGVzLCBnX3NleG8sIGdfaG9zcGksIGFsaWduID0gJ2h2JywgYXhpcyA9ICdybCcpCgojIGdpcmFmZShnZ29iaiA9IHBsb3RfZ3JpZChnX2VkYWRlcywgZ19zZXhvLCBuY29sID0gMiksCiMgICAgICAgICMgb3B0aW9ucyA9IGxpc3QoCiMgICAgICAgICMgICBvcHRzX3Rvb2x0aXAodXNlX2ZpbGwgPSBUUlVFKSwKIyAgICAgICAgIyAgIG9wdHNfdG9vbGJhcihzYXZlYXNwbmcgPSBGQUxTRSksCiMgICAgICAgICMgICBvcHRzX2hvdmVyKGNzcyA9ICJmaWxsOk5VTEw7c3Ryb2tlOk5VTEw7IikpLAojICAgICAgICB3aWR0aF9zdmcgPSA2LjUsIGhlaWdodF9zdmcgPSAzKQoKZ2lyYWZlKGdnb2JqID0gZ19ob3NwaSwKICAgICAgIG9wdGlvbnMgPSBsaXN0KAogICAgICAgICBvcHRzX3Rvb2xiYXIoc2F2ZWFzcG5nID0gRkFMU0UpKSwKICAgICAgIHdpZHRoX3N2ZyA9IDYuNSwgaGVpZ2h0X3N2ZyA9IDMpCgpgYGAKCiMjIyBDYXNvcyBhY3Rpdm9zIHBvciBjYW50w7NuIHkgcHJvdmluY2lhCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy5hbGlnbj0iY2VudGVyIn0KbGlicmFyeShnZ3JlcGVsKQoKY2FudF9nZW8gPC0gY2FudG9uZXNfbWFwYV9zZlsKICBjYW50b25lc19tYXBhX3NmJGZlY2hhID09IGZlY2hhX2hveSAmIAogICAgIWlzLm5hKGNhbnRvbmVzX21hcGFfc2YkcG9zaXRpdm9zKSAmIAogICAgY2FudG9uZXNfbWFwYV9zZiRwb3NpdGl2b3MgPiAwLCBdCgpjYW50X2dlb19jbnRyaWRzIDwtIHN0X2NlbnRyb2lkKGNhbnRfZ2VvKQoKcHJvdmluY2lhc19nZW8gPC0gYWdncmVnYXRlKGNhbnRvbmVzX3NpbXBbLCAiY29kX2NhbnRvbiJdLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gbGlzdChjYW50b25lc19zaW1wJHByb3ZpbmNpYSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVU4gPSBtYXgpCgpwcm92aW5jaWFzX2dlbyA8LSBkcGx5cjo6cmVuYW1lKHByb3ZpbmNpYXNfZ2VvLCBwcm92aW5jaWEgPSBHcm91cC4xKQoKcHJvdmluY2lhc19tYXBhIDwtICBtZXJnZShwcm92aW5jaWFzX2dlbywgcHJvdmluY2lhc1tmZWNoYSA9PSBmZWNoYV9ob3ksIF0sIGJ5ID0gInByb3ZpbmNpYSIpCgpnX21hcGEgPC0gZ2dwbG90KCkgKwogIGdlb21fc2YoZGF0YSA9IGNhbnRvbmVzX3NpbXAsIGZpbGwgPSAiZ3JheSIsIGNvbCA9ICJ3aGl0ZSIsIGx3ZCA9IDAuMiwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3NmKGRhdGEgPSBwcm92aW5jaWFzX21hcGEsIGZpbGwgPSBOQSwgY29sID0gIndoaXRlIiwgbHdkID0gMC42KSArCiAgZ2VvbV90ZXh0X3JlcGVsKGRhdGEgPSBwcm92aW5jaWFzX21hcGEsIAogICAgICAgICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAocHJvdmluY2lhLCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdm9zLCAiIGFjdW11bGFkb3NcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdm9zLCAiIGFjdGl2b3MiKSwKICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gZ2VvbWV0cnkpLAogICAgICAgICAgICAgICBhbHBoYSA9IDAuOCwKICAgICAgICAgICAgICAgc2l6ZSA9IDIsCiAgICAgICAgICAgICAgIGJveC5wYWRkaW5nID0gMCwKICAgICAgICAgICAgICAgc3RhdCA9ICJzZl9jb29yZGluYXRlcyIsCiAgICAgICAgICAgICAgIG1pbi5zZWdtZW50Lmxlbmd0aCA9IDAuNSkgKwogIGdlb21fc2ZfaW50ZXJhY3RpdmUoZGF0YSA9IGNhbnRfZ2VvX2NudHJpZHMsIAogICAgICAgICAgICAgICAgICAgICAgYWVzKHNpemUgPSBhY3Rpdm9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IHBvc2l0aXZvcywKICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gcGFzdGUwKCJQcm92aW5jaWE6ICIsIHByb3ZpbmNpYSwgIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW50w7NuOiAiLCBjYW50b24sICJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fzb3MgYWN1bXVsYWRvczogIiwgcG9zaXRpdm9zLCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhc29zIGFjdGl2b3M6ICIsIGFjdGl2b3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfaWQgPSBjYW50b24pLAogICAgICAgICAgICAgICAgICAgICAgYWxwaGEgPSAwLjUpICsKICBjb29yZF9zZihkYXR1bSA9IE5BKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHRyYW5zID0gJ3JldmVyc2UnKSArCiAgc2NhbGVfY29sb3JfZ3JhZGllbnQobG93ID0gImJsdWUiLCBoaWdoID0gInJlZCIsIG5hLnZhbHVlID0gTkEpICsgCiAgIyBzY2FsZV9jb2xvcl92aXJpZGlzX2ModHJhbnMgPSAicHNldWRvX2xvZyIpICsKICB0aGVtZV9saWdodCgpICsgCiAgbGFicyh4ID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICBzaXplID0gIkNhc29zIGFjdGl2b3MiLAogICAgICAgdGl0bGUgPSAiIiwKICAgICAgIHN1YnRpdGxlID0gIiIsCiAgICAgICBjb2xvciA9ICJDYXNvcyBhY3VtdWxhZG9zIikgKwogIHRoZW1lKHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9OSksCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9NykpICsKICBndWlkZXMoc2l6ZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksCiAgICAgICAgIGNvbG9yID0gZ3VpZGVfY29sb3VyYmFyKGJhcndpZHRoID0gLjcsIGJhcmhlaWdodCA9IDUpKSArCiAgc2NhbGVfc2l6ZV9hcmVhKCkKCmdpcmFmZShnZ29iaiA9IGdfbWFwYSwKICBvcHRpb25zID0gbGlzdChvcHRzX2hvdmVyKGNzcyA9ICJmaWxsOnllbGxvdzsiKSwKICAgICAgICAgICAgICAgICBvcHRzX3Rvb2xiYXIoc2F2ZWFzcG5nID0gRkFMU0UpLAogICAgICAgICAgICAgICAgIG9wdHNfdG9vbHRpcChjc3M9KCJiYWNrZ3JvdW5kLWNvbG9yOmdyYXk7Y29sb3I6d2hpdGU7cGFkZGluZzo1cHg7Ym9yZGVyLXJhZGl1czoycHg7IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnggPSAxMCwgb2ZmeSA9IDEwKSkpCgpgYGAKCiMjIyBFdm9sdWNpw7NuIGRlIGNhc29zIGFjdW11bGFkb3MgcG9yIHByb3ZpbmNpYQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcuYWxpZ249ImNlbnRlciJ9CmdfcHJvdiA8LSBnZ3Bsb3QobWVsdChwcm92aW5jaWFzWywgLihwcm92aW5jaWEsIGZlY2hhLCBwb3NpdGl2b3MsIHJlY3VwZXJhZG9zLCBhY3Rpdm9zKV0sCiAgICAgICAgICAgICAgICAgICAgICBpZC52YXJzID0gYygicHJvdmluY2lhIiwgImZlY2hhIiksCiAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lID0gInRpcG8iLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWUubmFtZSA9ICJjYXNvcyIpLCAKICAgICAgICAgICAgICAgICBhZXMoeCA9IGZlY2hhLCB5ID0gY2Fzb3MsIGZpbGwgPSBwcm92aW5jaWEpKSArCiAgZ2VvbV9jb2xfaW50ZXJhY3RpdmUoCiAgICBhZXModG9vbHRpcCA9IHBhc3RlMChwcm92aW5jaWEsICJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNvcywgIiBjYXNvcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgIiBhbCAiLCBkYXkoZmVjaGEpLCAiIGRlICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpKSwKICAgICAgZGF0YV9pZCA9IHByb3ZpbmNpYSkpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSB3ZWVrIiwgCiAgICAgICAgICAgICAgIG1pbm9yX2JyZWFrcyA9IE5VTEwsCiAgICAgICAgICAgICAgIGRhdGVfbGFiZWxzID0gIGZvcm1hdG9fZmVjaGEpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkFjY2VudCIpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHRpcG8pKSArCiAgdGhlbWVfbGlnaHQoKSArCiAgbGFicyh4ID0gIiIsCiAgICAgICB5ID0gIkNhc29zIHJlcG9ydGFkb3MiLAogICAgICAgZmlsbCA9ICIiLAogICAgICAgdGl0bGUgPSAiIiwKICAgICAgIHN1YnRpdGxlID0gIiIpICsKICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NjAsIGhqdXN0PTEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIiwgbGVnZW5kLmJveCA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoNSwwLDAsMCksICJtbSIpLAogICAgICAgIGxlZ2VuZC5rZXkud2lkdGggPSB1bml0KDIsIm1tIiksCiAgICAgICAgbGVnZW5kLmtleS5zaXplID0gdW5pdCg1LCAibW0iKSkgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChucm93ID0gMSkpCgpnaXJhZmUoZ2dvYmogPSBnX3Byb3YsCiAgICAgICBvcHRpb25zID0gbGlzdCgKICAgICAgICAgb3B0c190b29sdGlwKHVzZV9maWxsID0gVFJVRSksCiAgICAgICAgIG9wdHNfdG9vbGJhcihzYXZlYXNwbmcgPSBGQUxTRSksCiAgICAgICAgIG9wdHNfaG92ZXIoY3NzID0gImZpbGw6TlVMTDtzdHJva2U6TlVMTDsiKSksCiAgICAgICB3aWR0aF9zdmcgPSA2LCBoZWlnaHRfc3ZnID0gNSkKYGBgCgoqIE5vdGVzZSBxdWUgcGFyYSBlbCAxNyBkZSBhYnJpbCBodWJvIHVuIGZhbHRhbnRlIGVuIGxvcyBkYXRvcyBkZSBwZXJzb25hcyByZWN1cGVyYWRhcy4gCgojIyMgRXZvbHVjacOzbiBkZSBjYXNvcyBwb3IgY2FudMOzbiBkdXJhbnRlIGxvcyDDumx0aW1vcyA0MCBkw61hcwpgYGB7ciwgZWNobyA9IEZBTFNFLCBmaWcuYWxpZ249ImNlbnRlciJ9CmNhbnRfaGVhdG1hcCA8LSBjYW50b25lc19tYXBhCnNldG9yZGVyKGNhbnRfaGVhdG1hcCwgLWNhbnRvbiwgZmVjaGEpCmNhbnRfaGVhdG1hcCA8LSBjYW50X2hlYXRtYXBbCiAgLCAuKGNhbnRvbiwgcHJvdmluY2lhLCBmZWNoYSwgYWN0aXZvcywgcG9zaXRpdm9zLCByZWN1cGVyYWRvcykKXVsgLCAKICBgOj1gKG51ZXZvc19wb3NpdGl2b3MgPSBwb3NpdGl2b3MgLSBzaGlmdChwb3NpdGl2b3MsIGZpbGwgPSAwKSwKICAgICAgIG51ZXZvc19hY3Rpdm9zID0gYWN0aXZvcyAtIHNoaWZ0KGFjdGl2b3MsIGZpbGwgPSAwKSksCiAgYnkgPSBjYW50b24KXVsgLCAKICAgYDo9YChudWV2b3NfYWN0aXZvcyA9IGZpZmVsc2UobnVldm9zX2FjdGl2b3MgPCAwICYgcmVjdXBlcmFkb3MgPT0gMCwgMCwgbnVldm9zX2FjdGl2b3MpLAogICAgICAgIG51ZXZvc19wb3NpdGl2b3MgPSBmaWZlbHNlKG51ZXZvc19wb3NpdGl2b3MgPCAwLCAwLCBudWV2b3NfcG9zaXRpdm9zKSwKICAgICAgICBJRCA9IHNlcV9sZW4oLk4pKQpdWwogIGZlY2hhID49IGx1YnJpZGF0ZTo6eW1kKGZlY2hhX2hveSkgLSBkYXlzKDQwKQpdCgpjYW50X2Nlcm9fY2Fzb3MgPC0gY2FudF9oZWF0bWFwWywgLihjYXNvc18zNWQgPSBzdW0oYWN0aXZvcykpLCBieSA9IGNhbnRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc29zXzM1ZCA9PSAwLCBjYW50b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQoKY2FudF9oZWF0bWFwX2Nhc29zIDwtIGNhbnRfaGVhdG1hcFshKGNhbnRvbiAlaW4lIGNhbnRfY2Vyb19jYXNvcyldCgpjYW50X2hlYXRtYXBfY2Fzb3MkY2FudG9uIDwtIGZhY3RvcihjYW50X2hlYXRtYXBfY2Fzb3MkY2FudG9uLCBsZXZlbHM9dW5pcXVlKGNhbnRfaGVhdG1hcF9jYXNvcyRjYW50b24pKQojIGNhbnRfaGVhdG1hcF9jYXNvc1tudWV2b3NfcG9zaXRpdm9zID09IDAsIG51ZXZvc19wb3NpdGl2b3MgOj0gTkFdCgpnX2NhbnRfMSA8LSBnZ3Bsb3QoY2FudF9oZWF0bWFwX2Nhc29zLCAKICAgICAgIGFlcyh4ID0gZmVjaGEsIHkgPSBjYW50b24sIGZpbGwgPSBhY3Rpdm9zKSkgKyAKICBnZW9tX3RpbGUod2lkdGg9MSwgaGVpZ2h0PS44KSArCiAgI2dlb21fcG9pbnQoc2l6ZSA9IDAuNCkgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxMCBkYXlzIiwgCiAgICAgICAgICAgICAgIG1pbm9yX2JyZWFrcyA9IE5VTEwsCiAgICAgICAgICAgICAgIGRhdGVfbGFiZWxzID0gZm9ybWF0b19mZWNoYSwKICAgICAgICAgICAgICAgI2xpbWl0cyA9IGMobWluKGNhbnRvbmVzX3RpZHkkZmVjaGEpLCB5bWQoZmVjaGFfaG95KSksCiAgICAgICAgICAgICAgIHNlYy5heGlzID0gZHVwX2F4aXMoKSkgKwogICMgc2NhbGVfY29sb3VyX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKHRyYW5zID0gInBzZXVkb19sb2ciKSArCiAgdGhlbWVfbGlnaHQoKSArCiAgbGFicyh4ID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICBmaWxsID0gIiIsCiAgICAgICB0aXRsZSA9ICIiLAogICAgICAgc3VidGl0bGUgPSAiQ2Fzb3MgYWN0aXZvcyIpICsKICB0aGVtZSgjYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9NjAsIGhqdXN0PTEpLAogICAgICAgICNheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gNSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJsZWZ0IiwgbGVnZW5kLmJveCA9ICJ2ZXJ0aWNhbCIsCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYpLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAsMCwwLDApLCAibW0iKQogICAgICAgICkgKwogIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3VyYmFyKGJhcndpZHRoID0gLjUsIGJhcmhlaWdodCA9IDEwKSkKCmdfY2FudF8xX2cgPC0gZ19jYW50XzEgKyAKICBnZW9tX3RpbGVfaW50ZXJhY3RpdmUoCiAgICBhZXModG9vbHRpcCA9IHBhc3RlMCgKICAgICAgIlByb3ZpbmNpYTogIiwgcHJvdmluY2lhLCAiXG4iLAogICAgICAiQ2FudMOzbjogIiwgY2FudG9uLCAiXG4iLAogICAgICBkYXkoZmVjaGEpLCAiIGRlICIsIG1vbnRoKGZlY2hhLCBsYWJlbD1UUlVFLCBhYmJyPUZBTFNFKSwgIlxuIiwgCiAgICAgICJDYXNvcyBhY3VtdWxhZG9zOiAiLCBwb3NpdGl2b3MsICJcbiIsCiAgICAgICJOdWV2b3MgY2Fzb3MgcG9zaXRpdm9zOiAiLCBudWV2b3NfcG9zaXRpdm9zLCAiXG4iLCAKICAgICAgIkNhc29zIGFjdGl2b3M6ICIsIGFjdGl2b3MpLAogICAgICBkYXRhX2lkID0gSUQpLCAKICAgIHdpZHRoPTEsIGhlaWdodD0uOCkKCmdfY2FudF8yIDwtIGdncGxvdChjYW50X2hlYXRtYXBfY2Fzb3MsIAogICAgICAgYWVzKHggPSBmZWNoYSwgCiAgICAgICAgICAgeSA9IGNhbnRvbiwgCiAgICAgICAgICAgZmlsbCA9IG51ZXZvc19wb3NpdGl2b3MpKSArIAogIGdlb21fdGlsZSh3aWR0aD0xLCBoZWlnaHQ9LjgpICsKICAjZ2VvbV9wb2ludChzaXplID0gMC40KSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjEwIGRheXMiLCAKICAgICAgICAgICAgICAgbWlub3JfYnJlYWtzID0gTlVMTCwKICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSBmb3JtYXRvX2ZlY2hhLAogICAgICAgICAgICAgICAjbGltaXRzID0gYyhtaW4oY2FudG9uZXNfdGlkeSRmZWNoYSksIHltZChmZWNoYV9ob3kpKSwKICAgICAgICAgICAgICAgc2VjLmF4aXMgPSBkdXBfYXhpcygpKSArCiAgIyBzY2FsZV9jb2xvdXJfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgIyBzY2FsZV95X2Rpc2NyZXRlKHBvc2l0aW9uID0gInJpZ2h0IikgKwogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKG9wdGlvbiA9ICJwbGFzbWEiLCAKICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAxLCAKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBudW1iZXJfZm9ybWF0KGFjY3VyYWN5ID0gMSksIAogICAgICAgICAgICAgICAgICAgICAgIHRyYW5zID0gInBzZXVkb19sb2ciKSArCiAgdGhlbWVfbGlnaHQoKSArCiAgbGFicyh4ID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICBmaWxsID0gIiIsCiAgICAgICB0aXRsZSA9ICIiLAogICAgICAgc3VidGl0bGUgPSAiQ2Fzb3MgcG9zaXRpdm9zIG51ZXZvcyIpICsKICB0aGVtZSgjYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9NjAsIGhqdXN0PTAuNSksCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0icmlnaHQiLCBsZWdlbmQuYm94ID0gInZlcnRpY2FsIiwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMCwwLDAsMCksICJtbSIpKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvdXJiYXIoYmFyd2lkdGggPSAuNSwgYmFyaGVpZ2h0ID0gMTApKQoKZ19jYW50XzJfZyA8LSBnX2NhbnRfMiArIAogIGdlb21fdGlsZV9pbnRlcmFjdGl2ZSgKICAgIGFlcyh0b29sdGlwID0gcGFzdGUwKAogICAgICAiUHJvdmluY2lhOiAiLCBwcm92aW5jaWEsICJcbiIsCiAgICAgICJDYW50w7NuOiAiLCBjYW50b24sICJcbiIsCiAgICAgIGRheShmZWNoYSksICIgZGUgIiwgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpLCAiXG4iLAogICAgICAiQ2Fzb3MgYWN1bXVsYWRvczogIiwgcG9zaXRpdm9zLCAiXG4iLAogICAgICAiTnVldm9zIGNhc29zIHBvc2l0aXZvczogIiwgbnVldm9zX3Bvc2l0aXZvcywgIlxuIiwKICAgICAgIkNhc29zIGFjdGl2b3MgbnVldm9zOiAiLCBudWV2b3NfYWN0aXZvcyksCiAgICAgIGRhdGFfaWQgPSBJRCksIAogICAgd2lkdGg9LjksIGhlaWdodD0uOCkKCmdpcmFmZShnZ29iaiA9IHBsb3RfZ3JpZChnX2NhbnRfMV9nLCBnX2NhbnRfMl9nLCByZWxfd2lkdGhzID0gYygxLCAuNzUpKSwgCiAgICAgICBvcHRpb25zID0gbGlzdChvcHRzX3Rvb2xiYXIoc2F2ZWFzcG5nID0gRkFMU0UpLAogICAgICAgICAgICAgICAgICAgICAgb3B0c19ob3Zlcihjc3MgPSAiZmlsbDp0cmFuc3BhcmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOnJlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoOjIiKSwKICAgICAgICAgICAgICAgICAgICAgIG9wdHNfdG9vbHRpcChvZmZ4ID0gMTUsIG9mZnkgPSAxNSkpLAogICAgICAgd2lkdGhfc3ZnID0gOCwgaGVpZ2h0X3N2ZyA9IDExKQpgYGAKCiogVmFsZSBhY2xhcmFyIHF1ZSBlbiBsYXMgdGFibGFzIGRpYXJpYXMgY2FudG9uYWxlcyBxdWUgcHVibGljYSBlbCBNaW5pc3RlcmlvIGRlIFNhbHVkIGEgdmVjZXMgc2UgZGFuIGNhbWJpb3MgZW4gbGEgY2FudGlkYWQgZGUgZW5mZXJtb3MgcG9yIGNhbnTDs24gcXVlIG5vIGNvcnJlc3BvbmRlbiBjb24gY2FtYmlvcyBlbiBlbCB0b3RhbCBkZSBlbmZlcm1vcyBkZWwgcGHDrXMuIEVzdG8gdmVuZHLDrWEgc2llbmRvIGNvbW8gc2kgbG9zIGVuZmVybW9zIHNlIG1vdmlsaXphcm9uIGEgb3RybyBjYW50w7NuLCBzaWduaWZpY2FuZG8gdW5hIHJlZHVjY2nDs24gZW4gZWwgbsO6bWVybyBkZSBjYXNvcyBwYXJhIGVsIGNhbnTDs24gZG9uZGUgc2FsacOzIHkgdW4gaW5jcmVtZW50byBwYXJhIGVsIGNhbnTDs24gZG9uZGUgaW5ncmVzw7MgKHRlbmdvIGVudGVuZGlkbyBxdWUgZXN0byBzZSBkYSBjb24gYWNsYXJhY2lvbmVzIGRlbCBjYW50w7NuIGRlIHJlc2lkZW5jaWEgZGVsIGVuZmVybW8pLiBFbiBtaSBjYXNvIGVzdG95IGNvbnZpcnRpZW5kbyBlc29zICJjYXNvcyBuZWdhdGl2b3MiIGEgY2VybywgcGFyYSBxdWUgc2VhIG3DoXMgZsOhY2lsIG9ic2VydmFyIHVuaWNhbWVudGUgbG9zIGNhbnRvbmVzIGRvbmRlIHNlIGRpZXJvbiBsb3MgbnVldm9zIGNhc29zLgoKKioqKioqCgpFbGFib3JhZG8gcG9yIGdkczUwNkBnbWFpbC5jb20gY29uIGRhdG9zIGRpYXJpb3MgZGVsIFtDU1NFIGRlbCBKb2huIEhvcGtpbnMgVW5pdmVyc2l0eV0oaHR0cHM6Ly9naXRodWIuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5KSB5IGRlbCBbTWluaXN0ZXJpbyBkZSBTYWx1ZCBkZSBDb3N0YSBSaWNhXShodHRwOi8vZ2VvdmlzaW9uLnVuZWQuYWMuY3Ivb2dlcy8pLiA=